package com.example.mq.common.mode;

import com.example.mq.common.exception.MqException;
import com.example.mq.mqserver.core.BasicProperties;

import java.io.IOException;

/**
 * 函数式接口，用于处理消息的回调函数。
 * 当消费者收到消息后，该接口的方法会被调用，以处理传递的消息。
 * <p>
 * 注意：方法名和参数参考了 RabbitMQ 的设计。
 */
@FunctionalInterface
public interface Consumer {
    /**
     * 在每次服务器收到消息后调用，将消息推送给对应的消费者进行处理。
     *
     * @param consumerTag     消费者标签，用于标识消息来源的消费者
     * @param basicProperties 消息的基本属性，例如消息头和其他元数据
     * @param body            消息的内容，以字节数组形式传递
     * @throws MqException    如果处理消息时发生自定义的消息队列异常
     * @throws IOException    如果处理消息时发生 IO 异常
     */
    void handleDelivery(String consumerTag, BasicProperties basicProperties, byte[] body) throws MqException, IOException;
}
